# -*- coding: utf-8 -*-
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from apps.amway.models import EmpresariosAmway, PrestamosProductos, HistorialInventario, TipoTransaccion, Inventario, Producto, PreciosProducto
from apps.l10n.models import City, AdminArea
################################################################################
date_dict = { 'id' : 'datepicker', 'autocomplete' : 'off' }
nombre_cliente_dict = {'id' : 'nombrecliente'}
depto_dict = {'id' : 'departamento'}
ciudad_dict = {'id' : 'ciudad'}
prod_dict = {'id' : 'productos', 'size' : '35'}
################################################################################
class AddEmpresarioForm(forms.Form):    
    def __init__(self, *args, **kwargs):
        super(AddEmpresarioForm, self).__init__(*args, **kwargs)
        #self.fields['departamento'].choices = [('','----------')] + [(d.codigo, d.nombre) for d in Departamento.objects.all().order_by('nombre')]
        self.fields['departamento'].choices = [('0','----------')] + [(d.id, d.name) for d in AdminArea.objects.filter(country__numcode=170).order_by('name')]
        self.fields['ciudad'].choices = [('0','----------')]       
        
    nombre = forms.CharField(max_length=100)
    apellido = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    telefono = forms.CharField(required=False)
    movil = forms.CharField(required=False)
    fecha_nacimiento = forms.DateField(widget=forms.TextInput(attrs=date_dict), required=False)
    departamento = forms.ChoiceField(widget=forms.Select(attrs=depto_dict))
    ciudad = forms.ModelChoiceField(City.objects, widget=forms.Select(attrs=ciudad_dict))
    
    
    def save(self, usuario):        
        cod_empresario = EmpresariosAmway.objects.set_codigo(usuario)
        ciudad = City.objects.select_related().get(pk=int(self.cleaned_data['ciudad'].codigo))
        departamento = ciudad.admin_area
        pais = departamento.country

        
        empresario = EmpresariosAmway.objects.create(codigo=cod_empresario, nombre = self.cleaned_data['nombre'],
                                         apellido =self.cleaned_data['apellido'], email=self.cleaned_data['email'],
                                         telefono=self.cleaned_data['telefono'], movil=self.cleaned_data['movil'], 
                                         fecha_nacimiento=self.cleaned_data['fecha_nacimiento'], usuario=usuario,
                                         pais=pais, departamento=departamento, ciudad=ciudad
                                        ) 
################################################################################
class EditEmpresarioForm(forms.Form):   
    def __init__(self, *args, **kwargs):
        super(EditEmpresarioForm, self).__init__(*args, **kwargs)
        #self.fields['departamento'].choices = [('','----------')] + [(d.codigo, d.nombre) for d in Departamento.objects.all().order_by('nombre')]
        self.fields['departamento'].choices = [('0','----------')] + [(d.id, d.name) for d in AdminArea.objects.filter(country__numcode=170).order_by('name')]
        self.fields['ciudad'].choices = [('0','----------')]

    nombre = forms.CharField(max_length=100)
    apellido = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    telefono = forms.CharField(required=False)
    movil = forms.CharField(required=False)
    fecha_nacimiento = forms.DateField(widget=forms.TextInput(attrs=date_dict), required=False)
    departamento = forms.ChoiceField(widget=forms.Select(attrs=depto_dict))
    ciudad = forms.ModelChoiceField(City.objects, widget=forms.Select(attrs=ciudad_dict))
    
    def datos_empresario(self, cod_empresario):
        empresario = EmpresariosAmway.objects.get(pk=cod_empresario)
        self.fields['nombre'].initial = empresario.nombre
        self.fields['apellido'].initial = empresario.apellido
        self.fields['email'].initial = empresario.email
        self.fields['telefono'].initial = empresario.telefono
        self.fields['movil'].initial = empresario.movil
        self.fields['fecha_nacimiento'].initial = empresario.fecha_nacimiento
    
    def save(self, cod_empresario, usuario):
        ciudad = City.objects.select_related().get(pk=int(self.cleaned_data['ciudad'].codigo))
        departamento = ciudad.admin_area
        pais = departamento.country     
        
        empresario = EmpresariosAmway.objects.get(pk=cod_empresario, usuario=usuario)
        empresario.nombre = self.cleaned_data['nombre']
        empresario.apellido =self.cleaned_data['apellido']
        empresario.email=self.cleaned_data['email']
        empresario.telefono=self.cleaned_data['telefono']
        empresario.movil=self.cleaned_data['movil']
        empresario.fecha_nacimiento=self.cleaned_data['fecha_nacimiento']
        empresario.pais=pais
        empresario.departamento=departamento
        empresario.ciudad=ciudad        
        empresario.save()
    
################################################################################
class AddPrestamoProductoEmpresarioForm(forms.Form):	
	TIPO_PRESTAMO_CHOICES = (
		('', '---------------------'),
		(3, 'Prestamo de Empresario'),
		(4, 'Prestamo a Empresario'),
	)
	
	empresario= forms.CharField(widget=forms.HiddenInput())
	producto = forms.CharField(widget=forms.TextInput(attrs=prod_dict))
	cantidad = forms.CharField()
	tipo_prestamo = forms.ChoiceField(widget=forms.Select(), choices=TIPO_PRESTAMO_CHOICES)
	fecha = forms.DateField(widget=forms.TextInput(attrs=date_dict))
	
	def init_empresario(self, empresario_id):
		self.fields['empresario'].initial = empresario_id
		
		
	def clean(self):
		
		empresario = self.cleaned_data.get('empresario')
		producto = self.cleaned_data.get('producto')
		tipo_prestamo = self.cleaned_data.get('tipo_prestamo')
		
		
		if tipo_prestamo and producto and empresario:
			
			
			if int(tipo_prestamo) != 3:
				
				product = Producto.objects.get(referencia__iexact=producto)
				empresario = EmpresariosAmway.objects.get(pk=empresario)
				try:
					producto_inventario = Inventario.objects.get(producto=product, usuario=empresario.usuario)
	
					if producto_inventario.existencias <= 0:
						raise forms.ValidationError(_(u'No tiene existencias de este producto en su Inventario'))

				except Inventario.DoesNotExist:
					raise forms.ValidationError(_(u'Este producto no existe en su Inventario'))
				
		return self.cleaned_data
	
	
	def save(self, usuario):
		fecha = self.cleaned_data['fecha']
		cantidad = int(self.cleaned_data['cantidad'])
		producto_ref = self.cleaned_data['producto']
		empresario = EmpresariosAmway.objects.get(usuario=usuario, pk=self.cleaned_data['empresario'])
		producto = Producto.objects.get(referencia__exact=self.cleaned_data['producto'])
		tipo_transaccion = TipoTransaccion.objects.get(pk=int(self.cleaned_data['tipo_prestamo']))
		
		inventario = Inventario.objects.get(producto=producto, usuario=usuario)
		precio = PreciosProducto.objects.get_precio_x_fecha(producto_ref, fecha)
		valor = int(precio) * cantidad
		valor_actual = int(inventario.valor)
		
		
		if int(self.cleaned_data['tipo_prestamo']) != 3:		
			#inventario = Inventario.objects.get(producto=producto, usuario=usuario)
			#precio = PreciosProducto.objects.get_precio_x_fecha(producto, fecha)
			#valor = int(precio) * cantidad
			#valor_actual = int(inventario.valor)
			inventario.existencias -= cantidad
			nuevo_valor = valor_actual - valor
			inventario.valor = nuevo_valor
			historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
			inventario.save()			
		
		else:
			inventario.existencias += cantidad
			nuevo_valor = valor_actual + valor
			inventario.valor = nuevo_valor
			historial_inventario = HistorialInventario.objects.create(fecha=fecha, inventario=inventario, transaccion=tipo_transaccion, cantidad=cantidad, usuario=usuario)
			inventario.save()	
		
		
		
		prestamo_producto = PrestamosProductos.objects.create(fecha=fecha, cantidad=cantidad, usuario=usuario,
															  empresario=empresario, tipo_prestamo=tipo_transaccion,
															  producto=producto)
		
#################################################################################